﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entidades;
using Negocio;

namespace Presentación
{
    public partial class Jugar : System.Web.UI.Page
    {
        private PartidaEntidades partida;
        private Negocio.PartidaNegocio partidaNeg;

        public Jugar()
        {
            partidaNeg = new PartidaNegocio();
        }        

        protected void Page_Load(object sender, EventArgs e)
        {
            int idUsuario = int.Parse(Request.Cookies["usuarioActivo"]["idUsuario"]);
            int idGrilla = int.Parse(Request.QueryString["idGrilla"]);
            partida = partidaNeg.ObtenerPartida(idUsuario, idGrilla);            

            if (!IsPostBack)
            {                
                CargarReferencias();
                CargarListaPalabras();
                ActualizarTabla();
            }            
        }

        private void ActualizarTabla()
        {
            bool fueJugada;

            foreach (PalabraEntidades palabra in partida.Palabras)
            {
                fueJugada = partidaNeg.FueResueltaPalabra(partida, palabra.NumeroPalabra);
                
                TableRow fila = new TableRow();
                for (int i = 0; i < palabra.Palabra.Length; i++)
                {
                    TableCell celda = new TableCell();
                    if (fueJugada)
                        celda.Text = palabra.Palabra[i].ToString().ToUpper();
                    fila.Cells.Add(celda);
                }

                grillaTable.Rows.Add(fila);
            }
        }

        private void CargarListaPalabras()
        {
            foreach (PalabraEntidades palabra in partida.Palabras)
            {
                if (!partidaNeg.FueResueltaPalabra(partida, palabra.NumeroPalabra))
                    PalabraDropDownList.Items.Add(palabra.NumeroPalabra.ToString());
            }

            IngresoPalabrasPanel.Enabled = PalabraDropDownList.Items.Count > 0;
            
            if (PalabraDropDownList.Items.Count > 0)
            {
                int numPrimeraSinResolver = int.Parse(PalabraDropDownList.Items[0].Value);
                PalabraTextBox.MaxLength = partida.Palabras.Find(item => item.NumeroPalabra == numPrimeraSinResolver).Palabra.Length;
            }
        }

        private void CargarReferencias()
        {
            foreach (PalabraEntidades palabra in partida.Palabras)
            {
                ReferenciasLabel.Text += palabra.NumeroPalabra + ". " + palabra.Referencia + ".<br/>";
            }
        }

        protected void PalabraDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {            
            int numeroPalabraSel = int.Parse(PalabraDropDownList.SelectedValue);
            
            PalabraTextBox.Text = string.Empty;
            PalabraTextBox.MaxLength = partida.Palabras.Find(item => item.NumeroPalabra == numeroPalabraSel).Palabra.Length;

            ActualizarTabla();
        }

        protected void EnviarButton_Click(object sender, EventArgs e)
        {
            int numeroPalabraSel = int.Parse(PalabraDropDownList.SelectedValue);

            if (partidaNeg.Responder(partida, numeroPalabraSel, PalabraTextBox.Text))
            {
                partidaNeg.Guardar(partida);                
                PalabraDropDownList.Items.Remove(numeroPalabraSel.ToString());
                if (PalabraDropDownList.Items.Count > 0)
                    PalabraTextBox.MaxLength = partida.Palabras.Find(item => item.NumeroPalabra == int.Parse(PalabraDropDownList.Items[0].Value)).Palabra.Length;
                IngresoPalabrasPanel.Enabled = PalabraDropDownList.Items.Count > 0;
            }

            PalabraTextBox.Text = string.Empty;            
            ActualizarTabla();
        }
    }
}